package de.bsd.zwitscher.helper;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.util.Pair;
import twitter4j.User;
/**
* Download pictures of the passed {@link twitter4j.User}s in background.
*
* @author Heiko W. Rupp
*/
public class TriggerPictureDownloadTask extends AsyncTask<Void,Void,Pair<Bitmap,Bitmap>> {
private UserImageView userImageView;
private User user;
private final boolean downloadImages;
private final twitter4j.Status status;
private PicHelper picHelper;
public TriggerPictureDownloadTask(UserImageView userImageView, User user, boolean downloadImages, twitter4j.Status status) {
this.userImageView = userImageView;
this.user = user;
this.downloadImages = downloadImages;
this.status = status;
picHelper = new PicHelper();
}
@Override
protected void onPreExecute() {
// If the image is already on file, use it, otherwise set the image to null.
// This
// set the "unknown" image on that one. But not on all images unconditionally
userImageView.setImageBitmap(picHelper.getBitMapForScreenNameFromFile(user.getScreenName()));
}
@Override
protected Pair<Bitmap,Bitmap> doInBackground(Void... aVoid) {
// main user image
Bitmap imageBitmap = picHelper.getBitMapForScreenNameFromFile(user.getScreenName());
if (imageBitmap==null && downloadImages) {
imageBitmap = picHelper.fetchUserPic(user);
}
if (status == null) { // E.g. direct message
return new Pair<Bitmap,Bitmap>(imageBitmap,null);
}
// Image of the user of the retweeted status
Bitmap rtBitmap = null;
if (status.isRetweet()) {
rtBitmap = picHelper.getBitMapForScreenNameFromFile(status.getUser().getScreenName());
if (rtBitmap==null && downloadImages) {
rtBitmap = picHelper.fetchUserPic(status.getUser());
}
}
return new Pair<Bitmap,Bitmap>(imageBitmap,rtBitmap);
}
@Override
protected void onPostExecute(Pair<Bitmap,Bitmap> bitmaps) {
if (userImageView.getTag().equals(user.getScreenName())) {
userImageView.setImageBitmap(bitmaps.first);
userImageView.setRtImage(bitmaps.second);
if (status!=null) {
userImageView.markFavorite(status.isFavorited());
userImageView.markRetweet(status.isRetweet());
}
userImageView.invalidate(); // Make the view draw itself
}
}
}